//
//  game.hpp
//  EnTT Pacman
//
//  Created by Indiana Kernick on 22/9/18.
//  Copyright © 2018 Indiana Kernick. All rights reserved.
//

#ifndef CORE_GAME_HPP
#define CORE_GAME_HPP

#include <random>
#include "maze.hpp"
#include <SDL_scancode.h>
#include "util/sdl_quad_writer.hpp"
#include <entt/entity/registry.hpp>

class Game {
public:
  // @brief 游戏初始化工作
  void init();
  // @brief 处理游戏输入
  void input(SDL_Scancode);
  // @brief 游戏总体逻辑
  bool logic();
  // @brief 游戏核心逻辑 渲染
  void render(SDL::QuadWriter &, int);

private:
  ///< @brief 游戏进行状态
  enum class State {
    playing, // 进行中
    won, // 赢
    lost // 输
  };

  entt::registry reg; // Entt的实体组件系统（ECS）的注册表
  MazeState maze; // 存储地图的状态信息
  int dots = 0;
  std::mt19937 rand; //伪随机数生成器
  State state = State::playing; // 默认状态是进行中
  int ticks = 0;
  bool scattering = true; // 驱散标志
};

#endif
